The need for mobile computing and network connectivity are among the main driving forces behind the evolution of computing devices today. The desktop personal computer (PC) has been transformed into the portable notebook computer. More recently, a variety of handheld consumer electronic and embedded devices, including Personal Digital Assistants (PDAs), cellular phones and intelligent pagers have acquired relatively significant computing ability. In addition, other types of mobile consumer devices, such as digital television settop boxes, also have evolved greater computing capabilities. Now, network connectivity is quickly becoming an integral part of these consumer devices as they begin speaking with each other and traditional server computers in the form of data communication through various communication networks, such as a wired or wireless LAN, cellular, Bluetooth, 802.11b (Wi-Fi) wireless, and General Packet Radio Service (GPRS) mobile telephone networks.
The evolution of mobile computing devices has had a significant impact on the way people share information and is changing both personal and work environments. Traditionally, since a PC was fixed on a desk and not readily movable, it was possible to work or process data only at places where a PC with appropriate software was found. Nowadays, however, the users of mobile computing devices can capitalize on the mobility of these devices to access and share information from remote locations at their convenience.
The first generation mobile devices typically were request-only devices or devices that could merely request services and information from more intelligent and resource rich server computers. The servers used standard software architectures, such as the Java 2 Enterprise Edition (J2EE) platform. The server platforms define and support a programming model that allows thin-client applications to invoke logic instructions that execute on the servers.
Today, with the advent of more powerful computing platforms aimed at mobile computing devices, such as PocketPC and Java 2 Platform, Micro Edition (J2ME), mobile devices have gained the ability to host and process information and to participate in more complex interactive transactions. In order to capitalize on the mobility of these more powerful computing systems, developers have created mobile applications that may have been server-based in the past, but which can now be distributed on various mobile devices in a network. In other words, when a user interacts with a mobile device and requests a mobile application, either the mobile device or a remote server class machine may be capable of executing the application and meeting the request.
However, mobile computing systems pose several challenges for application developers. For example, mobile devices typically have more limited hardware resources than conventional server computers. In addition, mobile devices tend to have widely varying hardware configurations, including differences in computation power, memory size, display capability, means for inputting data, etc. Mobile communication networks also experience limited network bandwidth and network availability, and mobile devices may be connected, intermittently connected or disconnected from a network.
A popular platform for implementing mobile applications is the Java platform. It allows the same Java application to run different kinds of computing devices without operating system or hardware compatibility issues. Java is a programming language and Java programs are compiled into high-level machine independent bytecodes, which are then interpreted to run by a Java virtual machine. Since Java programs are machine independent, they run on different hardware platforms without the need to perform any special porting modifications for the programs.
However, known mobile application environments fail to intelligently exploit the resources available to mobile devices and servers to shield mobile applications from the limitations of mobile computing environments and to improve their performance. Therefore, a method is needed to determine where to run a mobile application in a network and, if multiple access networks are available, which network to use for communication between a requesting mobile device and a server that is configured to offer the requested application in order to optimize the performance of the mobile application.